package base;
import jm.audio.io.SampleOut;
import jm.audio.synth.AllPass;
import jm.audio.synth.EnvPoint;
import jm.audio.synth.Oscillator;

/**
 * An all pass filter is not unlike a comb filter in that it delays
 * the signal and recombines a scalled version. But it is more complex
 * in having both a fee back and feed forward adding of the delayed signal
 */
public final class SimpleAllPassInst extends jm.audio.Instrument {
    /**
     * The points to use in the construction of Envelopes
     */
    private EnvPoint[] pointArray = new EnvPoint[10];
    /**
     * The number of channels
     */
    private int channels;
    /**
     * the sample rate passed to the instrument
     */
    private int sampleRate;
    /**
     * the number of samples to delay the signal in the filter
     */
    private int delay;

    /**
     * A constructor to set an initial sampling rate
     */
    public SimpleAllPassInst(int sampleRate) {
        this(sampleRate, 1, 10);
    }

    /**
     * A constructor to set an initial sampling rate and number of channels.
     */
    public SimpleAllPassInst(int sampleRate, int channels, int delay) {
        this.sampleRate = sampleRate;
        this.channels = channels;
        this.delay = delay;
    }

    /**
     * Initialisation method used to build the objects that this instrument will use
     */
    public void createChain() {
        Oscillator osc = new Oscillator(this, Oscillator.TRIANGLE_WAVE, this.sampleRate, this.channels);
        AllPass ap = new AllPass(osc, this.delay);
        SampleOut sout = new SampleOut(ap);
    }
}


